/**
 * ID生成工具
 */

/**
 * 生成UUID的工具函数
 */

/**
 * 生成一个UUID v4
 * @returns UUID字符串
 */
export function generateUUID(): string {
  // 检查是否可以使用crypto API
  if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
    // 使用crypto API生成UUID
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
      const r = crypto.getRandomValues(new Uint8Array(1))[0] % 16 | 0
      const v = c === 'x' ? r : (r & 0x3 | 0x8)
      return v.toString(16)
    })
  } else {
    // 回退方法：使用Math.random()
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
      const r = Math.random() * 16 | 0
      const v = c === 'x' ? r : (r & 0x3 | 0x8)
      return v.toString(16)
    })
  }
}

/**
 * 生成基于时间戳的ID
 * @returns 时间戳ID字符串
 */
export function generateTimeId(): string {
  const timestamp = new Date().getTime()
  const random = Math.floor(Math.random() * 10000)
  return `${timestamp}-${random.toString().padStart(4, '0')}`
}

/**
 * 生成短ID
 * @param length ID长度，默认8
 * @returns 短ID字符串
 */
export function generateShortId(length: number = 8): string {
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
  let result = ''

  // 添加时间戳信息 (使用Base36编码压缩)
  const timestamp = new Date().getTime().toString(36)

  // 添加随机字符
  const remainingLength = Math.max(0, length - timestamp.length)
  for (let i = 0; i < remainingLength; i++) {
    result += chars.charAt(Math.floor(Math.random() * chars.length))
  }

  // 如果时间戳部分太长，则截取
  return (timestamp + result).slice(-length)
}
